// PROGRAMA : SCRPDEL (ORIGINADO DO SCRP130A)
// SISTEMA : SISP - SISTEMA DE INFORMACOES DE SEGURANCA PUBLICA
// IDENTIFICACAO CRIMINAL
// BIBLIOTECA : SISP
// OBJETIVO : EXCLUSAO DA FICHA DE INDICE CRIMINAL (USO RESTRITO)
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.util.Arrays;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Delcrimt;
import br.com.vti.sisp_sicrim.antigo.model.SicCadastro;
import br.com.vti.sisp_sicrim.antigo.model.SicSenha;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Scrg001;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Scrpdel OBJETIVO : EXCLUSAO DA FICHA DE INDICE CRIMINAL (USO RESTRITO) *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/scrpdel")
public class Scrpdel {
	// Views utilizadas
	SicCadastro criminalView = new SicCadastro();
	SicSenha senhaView = new SicSenha();
	// Telas/relatorios utilizados
	Delcrimt delcrimt;
	// Includes utilizados
	// Areas globais / session
	Scrg001 scrg001;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Scrpdel scrpdelAnterior;
	String faseproc = "0";
	int nroReg = 1;

	private int jCont = 0;
	private int jDataIni = 0;
	private int jData_nasc = 0;
	private String[][] dedos = new String[6][3];
	// private String[] jAlcunha = new String[5];
	// private String[] jObservacoes = new String[5];
	private int jDataDig = 0;

	private Delcrimt preMapas() {
		int ind;
		delcrimt = new Delcrimt(true, sessao);
		Arrays.fill(dedos, "");
		for (ind = 1; ind <= 4; ind++) {
			delcrimt.setJobservacoes(ind, "");
			delcrimt.setJalcunha(ind, "");
		}
		delcrimt.setDataCorrente(UtilBean.obtemDataCorrente());
		delcrimt.setDataCorrente(UtilBean.inverteDataCorrente());
		// RELATORIO

		sessao.getScrg001().setWProgramaw(this.getClass().getSimpleName());
		sessao.getScrg001().setWFuncaow("DELETAR");
		sessao.getScrg001().setWVltw(8);
		return delcrimt;
	}

	public Scrpdel(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Delcrimt delcrimt) {
		try {
			main(delcrimt);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroScrcerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Delcrimt pdelcrimt) {
		if (pdelcrimt == null) {
			primeiraVez = true;
			// delcrimt = new Delcrimt (primeiraVez);
			delcrimt = preMapas();
			delcrimt.setNavegar("../scrpdel/executar");
			result.include("delcrimt", delcrimt);
			sessao.setAtributo("SCRPDEL", this);
			delcrimt.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pdelcrimt);
		}
		delcrimt.receberTela(false, result);
		if (faseproc.equals("1")) {

			if (!((UtilBean.funcao.equals(UtilBean.ctt_retorna) || UtilBean.funcao.equals(UtilBean.ctt_processa)))) {
				delcrimt.enviarMensagem(null, "Tecla invalida");
				sessao.setAtributo("SCRPDEL", this);
				result.include("delcrimt", delcrimt);
				delcrimt.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
				Scrpp001 scrpp001 = new Scrpp001(result, sessao);
				scrpp001.executar(null);
				return;
			}
			if (!((delcrimt.getJconf().equals("S") || delcrimt.getJconf().equals("N")))) {
				delcrimt.enviarMensagem(null, "Confirmacao invalida");
				sessao.setAtributo("SCRPDEL", this);
				result.include("delcrimt", delcrimt);
				delcrimt.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			if (delcrimt.getJconf().equals("N")) {
				// dao.rollback();
				nroReg++;
			} else {
				while (criminalView.pesquisaRegEstadualGeralNomeCompleto(delcrimt.getJregGeral(), delcrimt.getJnomecompleto()) && criminalView.registrosProcessados() < nroReg)
					;
				if (criminalView.registrosProcessados() == nroReg) {
					criminalView.exclui();
					// dao.commit();
				}
			}

		}
		// Par�grafo: ini()
		while (criminalView.pesquisaRegEstadualGeralNomeCompleto(delcrimt.getJregGeral(), delcrimt.getJnomecompleto()) && criminalView.registrosProcessados() < nroReg)
			;
		if (criminalView.registrosProcessados() == nroReg) {
			delcrimt.setJregGeral(criminalView.getRegEstadualGeral());
			delcrimt.setJnomecompleto(criminalView.getNomeCompleto());
			delcrimt.setJmae(criminalView.getNomeMae());

			jData_nasc = criminalView.getDataNasc();
			delcrimt.setAnas(String.valueOf(UtilBean.extraiDigitos(jData_nasc, 8, 1, 4)));
			delcrimt.setMnas(String.valueOf(UtilBean.extraiDigitos(jData_nasc, 8, 5, 2)));
			delcrimt.setDnas(String.valueOf(UtilBean.extraiDigitos(jData_nasc, 8, 7, 2)));

			delcrimt.setJpai(criminalView.getNomePai());
			delcrimt.setJalcunha(criminalView.getApelidoAlcunhas());
			delcrimt.setJnatural(criminalView.getNaturalidade());
			delcrimt.setJcodmunnascimento(criminalView.getCodigoMunicipioNasc());
			delcrimt.setJufnascimento(criminalView.getUfNaturalidade());
			delcrimt.setJocorrencia(1);
			delcrimt.setJobservacoes(criminalView.getObservacao());
			jDataDig = criminalView.getDataDocAtu();

			delcrimt.setJmatricula(criminalView.getMatriculaFuncAtu());
			delcrimt.setJhorario(criminalView.getHoraAtu());
			jDataIni = jDataDig;

			senhaView.consultaMatricula(sessao.getScrg001().getWMatriculaw());

			delcrimt.setJnomedigitador(senhaView.getNome());
			if (jCont == 3) {
				Scrpp001 scrpp001 = new Scrpp001(result, sessao);
				scrpp001.setMensagem("ULTRAPASADA O NUMERO MAXIMO DE TENTATIVAS - TECLE <ENTER>");
				scrpp001.executar(null);
				return;
			}
			if (sessao.getScrg001().getWSenhaw() != senhaView.getSenha()) {
				jCont += 1;
				Scrpp001 scrpp001 = new Scrpp001(result, sessao);
				scrpp001.setMensagem("VERIFIQUE CORRETAMENTE SUA SENHA");
				scrpp001.executar(null);
				return;
			}

			sessao.getScrg001().setWNivelw(senhaView.getNivel());

			if (senhaView.registrosProcessados() == 0) {
				Scrpp001 scrpp001 = new Scrpp001(result, sessao);
				scrpp001.setMensagem("### USUARIO NAO CADASTRADO NO SISTEMA - TECLE <ENTER>");
				scrpp001.executar(null);
				return;
			}

			faseproc = "1";
			sessao.setAtributo("SCRPDEL", this);
			result.include("delcrimt", delcrimt);
			delcrimt.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
			return;

		}
		if (criminalView.registrosProcessados() == 0 && faseproc.equals("0")) {
			Scrpp001 scrpp001 = new Scrpp001(result, sessao);
			scrpp001.setMensagem("                   NENHUMA FICHA CRIMINAL FOI ENCONTRADA");
			scrpp001.executar(null);
			return;
		}
		faseproc = "1";
		if (criminalView.registrosProcessados() == 0) {
			Scrp1000 scrp1000 = new Scrp1000(result, sessao);
			scrp1000.executar(null);
			return;
		}
		sessao.setAtributo("SCRPDEL", this);
		result.include("delcrimt", delcrimt);
		delcrimt.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());

	}

	private void restaurarEstados(Delcrimt pdelcrimt) {
		this.scrpdelAnterior = (Scrpdel) sessao.getAtributo("SCRPDEL");
		if (pdelcrimt != null) {
			delcrimt = pdelcrimt;
		} else {
			delcrimt = this.scrpdelAnterior.delcrimt;
		}
		delcrimt.setSessao(sessao);
		this.faseproc = this.scrpdelAnterior.faseproc;
		this.nroReg = this.scrpdelAnterior.nroReg;
	}
}
